[38;2;117;113;94m/*[0m
[38;2;117;113;94m * Copyright (c) 2017-2019 The Typelevel Cats-effect Project Developers[0m
[38;2;117;113;94m *[0m
[38;2;117;113;94m * Licensed under the Apache License, Version 2.0 (the "License");[0m
[38;2;117;113;94m * you may not use this file except in compliance with the License.[0m
[38;2;117;113;94m * You may obtain a copy of the License at[0m
[38;2;117;113;94m *[0m
[38;2;117;113;94m *     http://www.apache.org/licenses/LICENSE-2.0[0m
[38;2;117;113;94m *[0m
[38;2;117;113;94m * Unless required by applicable law or agreed to in writing, software[0m
[38;2;117;113;94m * distributed under the License is distributed on an "AS IS" BASIS,[0m
[38;2;117;113;94m * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.[0m
[38;2;117;113;94m * See the License for the specific language governing permissions and[0m
[38;2;117;113;94m * limitations under the License.[0m
[38;2;117;113;94m */[0m

[38;2;249;38;114mpackage[0m[38;2;248;248;242m [0m[38;2;166;226;46mcats[0m
[38;2;249;38;114mpackage[0m[38;2;248;248;242m [0m[38;2;166;226;46meffect[0m
[38;2;249;38;114mpackage[0m[38;2;248;248;242m [0m[38;2;166;226;46mlaws[0m

[38;2;249;38;114mimport[0m[38;2;248;248;242m cats[0m[38;2;248;248;242m.[0m[38;2;248;248;242meffect[0m[38;2;248;248;242m.[0m[38;2;248;248;242mconcurrent[0m[38;2;248;248;242m.[0m[38;2;248;248;242mDeferred[0m
[38;2;249;38;114mimport[0m[38;2;248;248;242m cats[0m[38;2;248;248;242m.[0m[38;2;248;248;242msyntax[0m[38;2;248;248;242m.[0m[38;2;248;248;242mall[0m[38;2;248;248;242m.[0m[38;2;255;255;255m_[0m
[38;2;249;38;114mimport[0m[38;2;248;248;242m cats[0m[38;2;248;248;242m.[0m[38;2;248;248;242mlaws[0m[38;2;248;248;242m.[0m[38;2;255;255;255m_[0m

[38;2;249;38;114mimport[0m[38;2;248;248;242m scala[0m[38;2;248;248;242m.[0m[38;2;248;248;242mconcurrent[0m[38;2;248;248;242m.[0m[38;2;248;248;242mPromise[0m

[3;38;2;102;217;239mtrait[0m[4;38;2;102;217;239m ConcurrentEffectLaws[0m[38;2;248;248;242m[[0m[3;38;2;166;226;46mF[0m[38;2;248;248;242m[[0m[38;2;255;255;255m_[0m[38;2;248;248;242m][0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;249;38;114mextends[0m[38;2;248;248;242m [0m[3;4;38;2;166;226;46mConcurrentLaws[0m[38;2;248;248;242m[[0m[3;38;2;166;226;46mF[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;249;38;114mwith[0m[38;2;248;248;242m [0m[3;4;38;2;166;226;46mEffectLaws[0m[38;2;248;248;242m[[0m[3;38;2;166;226;46mF[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
[38;2;248;248;242m  [0m[38;2;249;38;114mimplicit[0m[38;2;248;248;242m [0m[3;38;2;102;217;239mdef[0m[38;2;248;248;242m [0m[38;2;166;226;46mF[0m[38;2;248;248;242m:[0m[38;2;248;248;242m [0m[3;38;2;166;226;46mConcurrentEffect[0m[38;2;248;248;242m[[0m[3;38;2;166;226;46mF[0m[38;2;248;248;242m][0m

[38;2;248;248;242m  [0m[3;38;2;102;217;239mdef[0m[38;2;248;248;242m [0m[38;2;166;226;46mrunAsyncRunCancelableCoherence[0m[38;2;248;248;242m[[0m[3;38;2;166;226;46mA[0m[38;2;248;248;242m][0m[38;2;248;248;242m([0m[3;38;2;253;151;31mfa[0m[38;2;248;248;242m:[0m[38;2;248;248;242m [0m[3;38;2;166;226;46mF[0m[38;2;248;248;242m[[0m[3;38;2;166;226;46mA[0m[38;2;248;248;242m][0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
[38;2;248;248;242m    [0m[3;38;2;102;217;239mval[0m[38;2;248;248;242m [0m[38;2;255;255;255mfa1[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;102;217;239mIO[0m[38;2;248;248;242m.[0m[38;2;248;248;242masync[0m[38;2;248;248;242m[[0m[3;38;2;166;226;46mA[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mcb[0m[38;2;248;248;242m [0m[3;38;2;102;217;239m=>[0m
[38;2;248;248;242m      [0m[38;2;102;217;239mF[0m[38;2;248;248;242m.[0m[38;2;248;248;242mrunAsync[0m[38;2;248;248;242m([0m[38;2;248;248;242mfa[0m[38;2;248;248;242m)[0m[38;2;248;248;242m([0m[3;38;2;253;151;31mr[0m[38;2;248;248;242m [0m[3;38;2;102;217;239m=>[0m[38;2;248;248;242m [0m[38;2;102;217;239mIO[0m[38;2;248;248;242m([0m[38;2;248;248;242mcb[0m[38;2;248;248;242m([0m[38;2;248;248;242mr[0m[38;2;248;248;242m)[0m[38;2;248;248;242m)[0m[38;2;248;248;242m)[0m[38;2;248;248;242m.[0m[38;2;248;248;242munsafeRunSync[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m
[38;2;248;248;242m    [0m[38;2;248;248;242m}[0m
[38;2;248;248;242m    [0m[3;38;2;102;217;239mval[0m[38;2;248;248;242m [0m[38;2;255;255;255mfa2[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;102;217;239mIO[0m[38;2;248;248;242m.[0m[38;2;248;248;242mcancelable[0m[38;2;248;248;242m[[0m[3;38;2;166;226;46mA[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mcb[0m[38;2;248;248;242m [0m[3;38;2;102;217;239m=>[0m
[38;2;248;248;242m      [0m[38;2;102;217;239mF[0m[38;2;248;248;242m.[0m[38;2;248;248;242mtoIO[0m[38;2;248;248;242m([0m[38;2;102;217;239mF[0m[38;2;248;248;242m.[0m[38;2;248;248;242mrunCancelable[0m[38;2;248;248;242m([0m[38;2;248;248;242mfa[0m[38;2;248;248;242m)[0m[38;2;248;248;242m([0m[3;38;2;253;151;31mr[0m[38;2;248;248;242m [0m[3;38;2;102;217;239m=>[0m[38;2;248;248;242m [0m[38;2;102;217;239mIO[0m[38;2;248;248;242m([0m[38;2;248;248;242mcb[0m[38;2;248;248;242m([0m[38;2;248;248;242mr[0m[38;2;248;248;242m)[0m[38;2;248;248;242m)[0m[38;2;248;248;242m)[0m[38;2;248;248;242m.[0m[38;2;248;248;242munsafeRunSync[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m[38;2;248;248;242m)[0m
[38;2;248;248;242m    [0m[38;2;248;248;242m}[0m
[38;2;248;248;242m    fa1 <-> fa2[0m
[38;2;248;248;242m  [0m[38;2;248;248;242m}[0m

[38;2;248;248;242m  [0m[3;38;2;102;217;239mdef[0m[38;2;248;248;242m [0m[38;2;166;226;46mrunCancelableIsSynchronous[0m[38;2;248;248;242m[[0m[3;38;2;166;226;46mA[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
[38;2;248;248;242m    [0m[3;38;2;102;217;239mval[0m[38;2;248;248;242m [0m[38;2;255;255;255mlh[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;102;217;239mDeferred[0m[38;2;248;248;242m.[0m[38;2;248;248;242muncancelable[0m[38;2;248;248;242m[[0m[3;38;2;166;226;46mF[0m[38;2;248;248;242m,[0m[38;2;248;248;242m [0m[3;38;2;102;217;239mUnit[0m[38;2;248;248;242m][0m[38;2;248;248;242m.[0m[38;2;248;248;242mflatMap [0m[38;2;248;248;242m{[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mlatch[0m[38;2;248;248;242m [0m[3;38;2;102;217;239m=>[0m
[38;2;248;248;242m      [0m[3;38;2;102;217;239mval[0m[38;2;248;248;242m [0m[38;2;255;255;255mspawned[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;102;217;239mPromise[0m[38;2;248;248;242m[[0m[3;38;2;102;217;239mUnit[0m[38;2;248;248;242m][0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m
[38;2;248;248;242m      [0m[38;2;117;113;94m//[0m[38;2;117;113;94m Never ending task[0m
[38;2;248;248;242m      [0m[3;38;2;102;217;239mval[0m[38;2;248;248;242m [0m[38;2;255;255;255mff[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;102;217;239mF[0m[38;2;248;248;242m.[0m[38;2;248;248;242mcancelable[0m[38;2;248;248;242m[[0m[3;38;2;166;226;46mA[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m[38;2;248;248;242m [0m[38;2;255;255;255m_[0m[38;2;248;248;242m [0m[3;38;2;102;217;239m=>[0m
[38;2;248;248;242m        spawned[0m[38;2;248;248;242m.[0m[38;2;248;248;242msuccess[0m[38;2;248;248;242m([0m[38;2;190;132;255m()[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m[38;2;248;248;242m latch[0m[38;2;248;248;242m.[0m[38;2;248;248;242mcomplete[0m[38;2;248;248;242m([0m[38;2;190;132;255m()[0m[38;2;248;248;242m)[0m
[38;2;248;248;242m      [0m[38;2;248;248;242m}[0m
[38;2;248;248;242m      [0m[38;2;117;113;94m//[0m[38;2;117;113;94m Execute, then cancel[0m
[38;2;248;248;242m      [0m[3;38;2;102;217;239mval[0m[38;2;248;248;242m [0m[38;2;255;255;255mtoken[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;102;217;239mF[0m[38;2;248;248;242m.[0m[38;2;248;248;242mdelay[0m[38;2;248;248;242m([0m[38;2;102;217;239mF[0m[38;2;248;248;242m.[0m[38;2;248;248;242mrunCancelable[0m[38;2;248;248;242m([0m[38;2;248;248;242mff[0m[38;2;248;248;242m)[0m[38;2;248;248;242m([0m[38;2;255;255;255m_[0m[38;2;248;248;242m [0m[3;38;2;102;217;239m=>[0m[38;2;248;248;242m [0m[38;2;102;217;239mIO[0m[38;2;248;248;242m.[0m[38;2;248;248;242munit[0m[38;2;248;248;242m)[0m[38;2;248;248;242m.[0m[38;2;248;248;242munsafeRunSync[0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m[38;2;248;248;242m)[0m[38;2;248;248;242m.[0m[38;2;248;248;242mflatMap [0m[38;2;248;248;242m{[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mcancel[0m[38;2;248;248;242m [0m[3;38;2;102;217;239m=>[0m
[38;2;248;248;242m        [0m[38;2;117;113;94m//[0m[38;2;117;113;94m Waiting for the task to start before cancelling it[0m
[38;2;248;248;242m        [0m[38;2;102;217;239mAsync[0m[38;2;248;248;242m.[0m[38;2;248;248;242mfromFuture[0m[38;2;248;248;242m([0m[38;2;102;217;239mF[0m[38;2;248;248;242m.[0m[38;2;248;248;242mpure[0m[38;2;248;248;242m([0m[38;2;248;248;242mspawned[0m[38;2;248;248;242m.[0m[38;2;248;248;242mfuture[0m[38;2;248;248;242m)[0m[38;2;248;248;242m)[0m[38;2;248;248;242m >> cancel[0m
[38;2;248;248;242m      [0m[38;2;248;248;242m}[0m
[38;2;248;248;242m      [0m[38;2;102;217;239mF[0m[38;2;248;248;242m.[0m[38;2;248;248;242mliftIO[0m[38;2;248;248;242m([0m[38;2;102;217;239mF[0m[38;2;248;248;242m.[0m[38;2;248;248;242mrunAsync[0m[38;2;248;248;242m([0m[38;2;248;248;242mtoken[0m[38;2;248;248;242m)[0m[38;2;248;248;242m([0m[38;2;255;255;255m_[0m[38;2;248;248;242m [0m[3;38;2;102;217;239m=>[0m[38;2;248;248;242m [0m[38;2;102;217;239mIO[0m[38;2;248;248;242m.[0m[38;2;248;248;242munit[0m[38;2;248;248;242m)[0m[38;2;248;248;242m.[0m[38;2;248;248;242mtoIO[0m[38;2;248;248;242m)[0m[38;2;248;248;242m *> latch[0m[38;2;248;248;242m.[0m[38;2;248;248;242mget[0m
[38;2;248;248;242m    [0m[38;2;248;248;242m}[0m
[38;2;248;248;242m    lh <-> [0m[38;2;102;217;239mF[0m[38;2;248;248;242m.[0m[38;2;248;248;242munit[0m
[38;2;248;248;242m  [0m[38;2;248;248;242m}[0m

[38;2;248;248;242m  [0m[3;38;2;102;217;239mdef[0m[38;2;248;248;242m [0m[38;2;166;226;46mrunCancelableStartCancelCoherence[0m[38;2;248;248;242m[[0m[3;38;2;166;226;46mA[0m[38;2;248;248;242m][0m[38;2;248;248;242m([0m[3;38;2;253;151;31ma[0m[38;2;248;248;242m:[0m[38;2;248;248;242m [0m[3;38;2;166;226;46mA[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
[38;2;248;248;242m    [0m[38;2;117;113;94m//[0m[38;2;117;113;94m Cancellation via runCancelable[0m
[38;2;248;248;242m    [0m[3;38;2;102;217;239mval[0m[38;2;248;248;242m [0m[38;2;255;255;255mf1[0m[38;2;248;248;242m:[0m[38;2;248;248;242m [0m[3;38;2;166;226;46mF[0m[38;2;248;248;242m[[0m[3;38;2;166;226;46mA[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;249;38;114mfor[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
[38;2;248;248;242m      [0m[3;38;2;253;151;31meffect1[0m[38;2;248;248;242m [0m[38;2;249;38;114m<-[0m[38;2;248;248;242m [0m[38;2;102;217;239mDeferred[0m[38;2;248;248;242m.[0m[38;2;248;248;242muncancelable[0m[38;2;248;248;242m[[0m[3;38;2;166;226;46mF[0m[38;2;248;248;242m,[0m[38;2;248;248;242m [0m[3;38;2;166;226;46mA[0m[38;2;248;248;242m][0m
[38;2;248;248;242m      [0m[3;38;2;253;151;31mlatch[0m[38;2;248;248;242m [0m[38;2;249;38;114m<-[0m[38;2;248;248;242m [0m[38;2;102;217;239mF[0m[38;2;248;248;242m.[0m[38;2;248;248;242mdelay[0m[38;2;248;248;242m([0m[38;2;102;217;239mPromise[0m[38;2;248;248;242m[[0m[3;38;2;102;217;239mUnit[0m[38;2;248;248;242m][0m[38;2;248;248;242m([0m[38;2;248;248;242m)[0m[38;2;248;248;242m)[0m
[38;2;248;248;242m      [0m[3;38;2;253;151;31mnever[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;102;217;239mF[0m[38;2;248;248;242m.[0m[38;2;248;248;242mcancelable[0m[38;2;248;248;242m[[0m[3;38;2;166;226;46mA[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m[38;2;248;248;242m [0m[38;2;255;255;255m_[0m[38;2;248;248;242m [0m[3;38;2;102;217;239m=>[0m
[38;2;248;248;242m        latch[0m[38;2;248;248;242m.[0m[38;2;248;248;242msuccess[0m[38;2;248;248;242m([0m[38;2;190;132;255m()[0m[38;2;248;248;242m)[0m[38;2;248;248;242m;[0m[38;2;248;248;242m effect1[0m[38;2;248;248;242m.[0m[38;2;248;248;242mcomplete[0m[38;2;248;248;242m([0m[38;2;248;248;242ma[0m[38;2;248;248;242m)[0m
[38;2;248;248;242m      [0m[38;2;248;248;242m}[0m
[38;2;248;248;242m      [0m[3;38;2;253;151;31mcancel[0m[38;2;248;248;242m [0m[38;2;249;38;114m<-[0m[38;2;248;248;242m [0m[38;2;102;217;239mF[0m[38;2;248;248;242m.[0m[38;2;248;248;242mliftIO[0m[38;2;248;248;242m([0m[38;2;102;217;239mF[0m[38;2;248;248;242m.[0m[38;2;248;248;242mrunCancelable[0m[38;2;248;248;242m([0m[38;2;248;248;242mnever[0m[38;2;248;248;242m)[0m[38;2;248;248;242m([0m[38;2;255;255;255m_[0m[38;2;248;248;242m [0m[3;38;2;102;217;239m=>[0m[38;2;248;248;242m [0m[38;2;102;217;239mIO[0m[38;2;248;248;242m.[0m[38;2;248;248;242munit[0m[38;2;248;248;242m)[0m[38;2;248;248;242m.[0m[38;2;248;248;242mtoIO[0m[38;2;248;248;242m)[0m
[38;2;248;248;242m      [0m[38;2;117;113;94m//[0m[38;2;117;113;94m Waiting for the task to start before cancelling it[0m
[38;2;248;248;242m      [0m[38;2;255;255;255m_[0m[38;2;248;248;242m [0m[38;2;249;38;114m<-[0m[38;2;248;248;242m [0m[38;2;102;217;239mAsync[0m[38;2;248;248;242m.[0m[38;2;248;248;242mfromFuture[0m[38;2;248;248;242m([0m[38;2;102;217;239mF[0m[38;2;248;248;242m.[0m[38;2;248;248;242mpure[0m[38;2;248;248;242m([0m[38;2;248;248;242mlatch[0m[38;2;248;248;242m.[0m[38;2;248;248;242mfuture[0m[38;2;248;248;242m)[0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;117;113;94m//[0m[38;2;117;113;94m TODO get rid of this, IO, and Future here[0m
[38;2;248;248;242m      [0m[38;2;255;255;255m_[0m[38;2;248;248;242m [0m[38;2;249;38;114m<-[0m[38;2;248;248;242m cancel[0m
[38;2;248;248;242m      [0m[3;38;2;253;151;31mresult[0m[38;2;248;248;242m [0m[38;2;249;38;114m<-[0m[38;2;248;248;242m effect1[0m[38;2;248;248;242m.[0m[38;2;248;248;242mget[0m
[38;2;248;248;242m    [0m[38;2;248;248;242m}[0m[38;2;248;248;242m [0m[38;2;249;38;114myield[0m[38;2;248;248;242m result[0m

[38;2;248;248;242m    [0m[38;2;117;113;94m//[0m[38;2;117;113;94m Cancellation via start.flatMap(_.cancel)[0m
[38;2;248;248;242m    [0m[3;38;2;102;217;239mval[0m[38;2;248;248;242m [0m[38;2;255;255;255mf2[0m[38;2;248;248;242m:[0m[38;2;248;248;242m [0m[3;38;2;166;226;46mF[0m[38;2;248;248;242m[[0m[3;38;2;166;226;46mA[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;249;38;114mfor[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
[38;2;248;248;242m      [0m[3;38;2;253;151;31meffect2[0m[38;2;248;248;242m [0m[38;2;249;38;114m<-[0m[38;2;248;248;242m [0m[38;2;102;217;239mDeferred[0m[38;2;248;248;242m.[0m[38;2;248;248;242muncancelable[0m[38;2;248;248;242m[[0m[3;38;2;166;226;46mF[0m[38;2;248;248;242m,[0m[38;2;248;248;242m [0m[3;38;2;166;226;46mA[0m[38;2;248;248;242m][0m
[38;2;248;248;242m      [0m[38;2;117;113;94m//[0m[38;2;117;113;94m Using a latch to ensure that the task started[0m
[38;2;248;248;242m      [0m[3;38;2;253;151;31mlatch[0m[38;2;248;248;242m [0m[38;2;249;38;114m<-[0m[38;2;248;248;242m [0m[38;2;102;217;239mDeferred[0m[38;2;248;248;242m.[0m[38;2;248;248;242muncancelable[0m[38;2;248;248;242m[[0m[3;38;2;166;226;46mF[0m[38;2;248;248;242m,[0m[38;2;248;248;242m [0m[3;38;2;102;217;239mUnit[0m[38;2;248;248;242m][0m
[38;2;248;248;242m      [0m[3;38;2;253;151;31mnever[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;102;217;239mF[0m[38;2;248;248;242m.[0m[38;2;248;248;242mbracket[0m[38;2;248;248;242m([0m[38;2;248;248;242mlatch[0m[38;2;248;248;242m.[0m[38;2;248;248;242mcomplete[0m[38;2;248;248;242m([0m[38;2;190;132;255m()[0m[38;2;248;248;242m)[0m[38;2;248;248;242m)[0m[38;2;248;248;242m([0m[38;2;255;255;255m_[0m[38;2;248;248;242m [0m[3;38;2;102;217;239m=>[0m[38;2;248;248;242m [0m[38;2;102;217;239mF[0m[38;2;248;248;242m.[0m[38;2;248;248;242mnever[0m[38;2;248;248;242m[[0m[3;38;2;102;217;239mUnit[0m[38;2;248;248;242m][0m[38;2;248;248;242m)[0m[38;2;248;248;242m([0m[38;2;255;255;255m_[0m[38;2;248;248;242m [0m[3;38;2;102;217;239m=>[0m[38;2;248;248;242m effect2[0m[38;2;248;248;242m.[0m[38;2;248;248;242mcomplete[0m[38;2;248;248;242m([0m[38;2;248;248;242ma[0m[38;2;248;248;242m)[0m[38;2;248;248;242m)[0m
[38;2;248;248;242m      [0m[3;38;2;253;151;31mfiber[0m[38;2;248;248;242m [0m[38;2;249;38;114m<-[0m[38;2;248;248;242m [0m[38;2;102;217;239mF[0m[38;2;248;248;242m.[0m[38;2;248;248;242mstart[0m[38;2;248;248;242m([0m[38;2;248;248;242mnever[0m[38;2;248;248;242m)[0m
[38;2;248;248;242m      [0m[38;2;117;113;94m//[0m[38;2;117;113;94m Waiting for the task to start before cancelling it[0m
[38;2;248;248;242m      [0m[38;2;255;255;255m_[0m[38;2;248;248;242m [0m[38;2;249;38;114m<-[0m[38;2;248;248;242m latch[0m[38;2;248;248;242m.[0m[38;2;248;248;242mget[0m
[38;2;248;248;242m      [0m[38;2;255;255;255m_[0m[38;2;248;248;242m [0m[38;2;249;38;114m<-[0m[38;2;248;248;242m [0m[38;2;102;217;239mF[0m[38;2;248;248;242m.[0m[38;2;248;248;242mstart[0m[38;2;248;248;242m([0m[38;2;248;248;242mfiber[0m[38;2;248;248;242m.[0m[38;2;248;248;242mcancel[0m[38;2;248;248;242m)[0m
[38;2;248;248;242m      [0m[3;38;2;253;151;31mresult[0m[38;2;248;248;242m [0m[38;2;249;38;114m<-[0m[38;2;248;248;242m effect2[0m[38;2;248;248;242m.[0m[38;2;248;248;242mget[0m
[38;2;248;248;242m    [0m[38;2;248;248;242m}[0m[38;2;248;248;242m [0m[38;2;249;38;114myield[0m[38;2;248;248;242m result[0m

[38;2;248;248;242m    f1 <-> f2[0m
[38;2;248;248;242m  [0m[38;2;248;248;242m}[0m

[38;2;248;248;242m  [0m[3;38;2;102;217;239mdef[0m[38;2;248;248;242m [0m[38;2;166;226;46mtoIORunCancelableConsistency[0m[38;2;248;248;242m[[0m[3;38;2;166;226;46mA[0m[38;2;248;248;242m][0m[38;2;248;248;242m([0m[3;38;2;253;151;31mfa[0m[38;2;248;248;242m:[0m[38;2;248;248;242m [0m[3;38;2;166;226;46mF[0m[38;2;248;248;242m[[0m[3;38;2;166;226;46mA[0m[38;2;248;248;242m][0m[38;2;248;248;242m)[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m
[38;2;248;248;242m    [0m[38;2;102;217;239mConcurrentEffect[0m[38;2;248;248;242m.[0m[38;2;248;248;242mtoIOFromRunCancelable[0m[38;2;248;248;242m([0m[38;2;248;248;242mfa[0m[38;2;248;248;242m)[0m[38;2;248;248;242m <-> [0m[38;2;102;217;239mF[0m[38;2;248;248;242m.[0m[38;2;248;248;242mtoIO[0m[38;2;248;248;242m([0m[38;2;248;248;242mfa[0m[38;2;248;248;242m)[0m
[38;2;248;248;242m}[0m

[3;38;2;102;217;239mobject[0m[4;38;2;102;217;239m ConcurrentEffectLaws[0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
[38;2;248;248;242m  [0m[3;38;2;102;217;239mdef[0m[38;2;248;248;242m [0m[38;2;166;226;46mapply[0m[38;2;248;248;242m[[0m[3;38;2;166;226;46mF[0m[38;2;248;248;242m[[0m[38;2;255;255;255m_[0m[38;2;248;248;242m][0m[38;2;248;248;242m][0m[38;2;248;248;242m([0m[38;2;249;38;114mimplicit[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mF0[0m[38;2;248;248;242m:[0m[38;2;248;248;242m [0m[3;38;2;166;226;46mConcurrentEffect[0m[38;2;248;248;242m[[0m[3;38;2;166;226;46mF[0m[38;2;248;248;242m][0m[38;2;248;248;242m,[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mcontextShift0[0m[38;2;248;248;242m:[0m[38;2;248;248;242m [0m[3;38;2;166;226;46mContextShift[0m[38;2;248;248;242m[[0m[3;38;2;166;226;46mF[0m[38;2;248;248;242m][0m[38;2;248;248;242m)[0m[38;2;248;248;242m:[0m[38;2;248;248;242m [0m[3;38;2;166;226;46mConcurrentEffectLaws[0m[38;2;248;248;242m[[0m[3;38;2;166;226;46mF[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m
[38;2;248;248;242m    [0m[38;2;249;38;114mnew[0m[38;2;248;248;242m [0m[3;38;2;166;226;46mConcurrentEffectLaws[0m[38;2;248;248;242m[[0m[3;38;2;166;226;46mF[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;248;248;242m{[0m
[38;2;248;248;242m      [0m[3;38;2;102;217;239mval[0m[38;2;248;248;242m [0m[38;2;255;255;255mF[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;102;217;239mF0[0m
[38;2;248;248;242m      [0m[3;38;2;102;217;239mval[0m[38;2;248;248;242m [0m[38;2;255;255;255mcontextShift[0m[38;2;248;248;242m [0m[38;2;249;38;114m=[0m[38;2;248;248;242m contextShift0[0m
[38;2;248;248;242m    [0m[38;2;248;248;242m}[0m
[38;2;248;248;242m}[0m
